package cn.study.vue_project_xxx.controller;
import cn.study.vue_project_xxx.common.exception.KnowException;
import cn.study.vue_project_xxx.common.result.ResultSet;
import cn.study.vue_project_xxx.entity.po.Menu;
import java.util.List;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import cn.study.vue_project_xxx.service.MenuService;
import java.io.Serializable;
import java.util.Objects;

/**
 * (Menu)表控制层
 *
 * @author makejava
 * @since 2023-04-26 16:38:30
 */
@Api(tags = "接口")
@RestController
@RequestMapping("/api/v1/menu")
@Slf4j
public class MenuController {
    /**
     * Service层对象
     */
    @Autowired
    private MenuService menuService;

    /**
     * 查询所有一级目录
     *
     * @param
     * @param
     * @return 所有数据
     */
    @ApiOperation("查询所有一级目录")
    @PostMapping("/firstLevelDirectory")
    public ResultSet<List<Menu>> firstLevelDirectory() {
        //查询所有一级目录
        List<Menu> list = menuService.getFirstLevelDirectory();
        return ResultSet.success(list);
    }

    /**
     * 查询该级目录下的子级目录
     *
     * @param
     * @param menu        查询实体
     * @return 所有数据
     */
    @ApiOperation("查询该级目录下的子级目录")
    @PostMapping("/query")
    public ResultSet<List<Menu>> query(Menu menu) {
        //查询该级目录下的子级目录
        List<Menu> list = menuService.getChildDirectory(menu);
        return ResultSet.success(list);
    }



    /**
     * 新增数据
     *
     * @param menu 实体对象
     * @return 新增结果
     */
    @ApiOperation("新增数据")
    @PostMapping
    public ResultSet<Boolean> add(@RequestBody Menu menu) {
        if (Objects.isNull(menu)){
            throw new KnowException("没有给后台指定新增的目录！");
        }
        return ResultSet.success(menuService.save(menu));
    }

    /**
     * 修改数据
     *
     * @param menu 实体对象
     * @return 修改结果
     */
    @ApiOperation("修改数据")
    @PutMapping
    public ResultSet<Boolean> edit(@RequestBody Menu menu) {
        if (Objects.isNull(menu)){
            throw new KnowException("没有给后台指定要修改的目录！");
        }
        return ResultSet.success(menuService.updateById(menu));
    }

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 删除结果
     */
    @ApiOperation("通过主键删除数据")
    @DeleteMapping
    public ResultSet<Boolean> deleteById(@RequestParam Integer id) {
        if (Objects.isNull(id)){
            throw new KnowException("没有给后台指定要删除的目录！");
        }

        return ResultSet.success(menuService.removeById(id));
    }
}

